package com.shiguiwu.springmybatis.spring.property;

import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @description: 自定义scope
 * @author: stone
 * @date: Created by 2021/4/6 19:57
 * @version: 1.0.0
 * @pakeage: com.shiguiwu.springmybatis.spring.property
 */
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
//@1：使用了@Scope注解，value为引用了一个常量，值为my，一会下面可以看到。
@Scope(BeanMyScope.scopeName)
public @interface MyScope {

    /**
     * @2：注意这个地方，参数名称也是proxyMode，类型也是ScopedProxyMode，而@Scope注解
     * 中有个和这个同样类型的参数，spring容器解析的时候，会将这个参数的值赋给@MyScope注解
     * 上面的@Scope注解的proxyMode参数，所以此处我们设置proxyMode值，最后的效果就是直接
     * 改变了@Scope中proxyMode参数的值。此处默认值取的是ScopedProxyMode.TARGET_CLASS
     * @return
     */

    ScopedProxyMode proxyMode() default ScopedProxyMode.TARGET_CLASS;
}
